package xyz.zyl2020.java8.function;

import java.util.function.Function;

/**
 * @author ZhuYinglong
 * @date 2020/10/9 0009
 */
public class FunctionDemo {

    public static void main(String[] args) {
        functionDemo1();
        functionDemo2();
        functionDemo3();
        functionDemo4(1024, integer -> integer.toString() + "程序员节");
    }

    /**
     * 函数式接口可以被new出一个实例来，必须实现其抽象接口
     */
    static void functionDemo1() {
        Function<Integer, String> function = new Function<Integer, String>() {
            @Override
            public String apply(Integer integer) {
                return integer.toString() + "程序员节";
            }
        };
        System.out.println("functionDemo1 --> " + function.apply(1024));
    }

    /**
     * 可以使用Lambada表达式简化函数式接口
     */
    static void functionDemo2() {
        Function<Integer, String> function = (integer) -> {
            return integer.toString() + "程序员节";
        };
        System.out.println("functionDemo2 --> " + function.apply(1024));
    }

    /**
     * Lambada表达式入参只有一个时，可以不加小括号；
     * 方法体内只有一行代码时可以不加大括号和 return 关键字，直接编写返回结果即可
     */
    static void functionDemo3() {
        Function<Integer, String> function = integer -> integer.toString() + "程序员节";
        System.out.println("functionDemo2 --> " + function.apply(1024));
    }

    /**
     * 函数式接口可以做为方法的入参
     *
     * @param integer
     * @param function
     */
    static void functionDemo4(Integer integer, Function<Integer, String> function) {
        System.out.println("functionDemo4 --> " + function.apply(integer));
    }
}
